package com.commerce.user.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.commerce.common.entity.User;
import com.commerce.common.utils.PageResult;
import com.commerce.user.entity.Permission;
import com.commerce.user.entity.Role;

import java.util.List;

public interface UserService extends IService<User> {
    /**
     * 获取用户分页列表
     */
    Page<User> getUserPage(Integer pageNum, Integer pageSize);
    
    /**
     * 获取当前登录用户
     */
    User getCurrentUser();
    
    /**
     * 根据关键字搜索用户
     */
    List<User> searchUsers(String keyword);
    
    /**
     * 获取安全的用户分页列表（不包含敏感信息）
     */
    Page<User> getSecureUserPage(Integer pageNum, Integer pageSize);

    /**
     * 更新用户头像
     */
    boolean updateAvatar(Long id, String avatarUrl);

    /**
     * 更新用户信息
     */
    void updateUserInfo(User user);

    /**
     * 获取用户信息
     */
    User getUserInfo();

    /**
     * 用户登录
     */
    User login(String username, String password);
    
    /**
     * 根据用户名获取用户
     */
    User getUserByUsername(String username);
    
    /**
     * 根据邮箱获取用户
     */
    User getUserByEmail(String email);
    
    /**
     * 获取用户分页列表（带条件筛选）
     */
    PageResult<User> getPageList(int page, int size, String username, String email, Integer status);

    /**
     * 获取用户权限ID列表
     */
    List<Long> getUserPermissions(Long userId);
    
    /**
     * 获取用户权限列表
     */
    List<Permission> getUserPermissionList(Long userId);
    
    /**
     * 获取用户角色列表
     */
    List<Role> getUserRoleList(Long userId);
    
    /**
     * 分配用户角色
     */
    boolean assignUserRole(Long userId, List<Long> roleIds);
    
    /**
     * 注册用户
     */
    User register(User user, String password);
    
    /**
     * 获取所有角色列表
     */
    List<Role> getRoleList();
    
    /**
     * 获取所有权限列表
     */
    List<Permission> getPermissionList();
}